package com.wang.weather.service.impl;

import com.wang.weather.Utils.CacheService;
import com.wang.weather.Utils.ResData;
import com.wang.weather.common.WeatherQuery;
import com.wang.weather.service.WeatherService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.concurrent.TimeUnit;


@Service
@RequiredArgsConstructor
public class WeatherServiceImpl implements WeatherService {
    private final WeatherQuery weatherQuery;
    private final CacheService cacheService;

    @Override
    // 使用@Override注解表明该方法重写了父类或接口的方法
    // 此处可以添加@Async注解以异步执行该方法，但当前已注释掉
    public ResData getWeatherData(String cityName) {
        // 首先尝试从Redis缓存中获取天气数据
        ResData redisResult = cacheService.getObject(cityName,ResData.class);
        if (redisResult != null){// 如果缓存中存在该城市的天气数据，则直接返回
            return redisResult;
        }
        // 如果缓存中没有该城市的天气数据，则调用weatherQuery服务进行查询
        ResData weather = weatherQuery.getWeather(cityName);
        // 将查询到的天气数据存入缓存，并设置过期时间为23减去当前小时数，单位为小时
        // 这里的目的是确保缓存的天气数据在一天内有效
        cacheService.add(cityName,weather,23 - new Date().getHours(), TimeUnit.HOURS);
        // 返回查询到的天气数据
        return weather;
    }

}
